home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / include / linux / tipc.h < prev    next >
C/C++ Source or Header  |  2008-10-24  |  6KB  |  214 lines

  1. /*
  2.  * include/linux/tipc.h: Include file for TIPC socket interface
  3.  * 
  4.  * Copyright (c) 2003-2006, Ericsson AB
  5.  * Copyright (c) 2005, Wind River Systems
  6.  * All rights reserved.
  7.  *
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions are met:
  10.  *
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  * 2. Redistributions in binary form must reproduce the above copyright
  14.  *    notice, this list of conditions and the following disclaimer in the
  15.  *    documentation and/or other materials provided with the distribution.
  16.  * 3. Neither the names of the copyright holders nor the names of its
  17.  *    contributors may be used to endorse or promote products derived from
  18.  *    this software without specific prior written permission.
  19.  *
  20.  * Alternatively, this software may be distributed under the terms of the
  21.  * GNU General Public License ("GPL") version 2 as published by the Free
  22.  * Software Foundation.
  23.  *
  24.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  25.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  27.  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  28.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  29.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  30.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  31.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  32.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  33.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  34.  * POSSIBILITY OF SUCH DAMAGE.
  35.  */
  36.  
  37. #ifndef _LINUX_TIPC_H_
  38. #define _LINUX_TIPC_H_
  39.  
  40. #include <linux/types.h>
  41.  
  42. /*
  43.  * TIPC addressing primitives
  44.  */
  45.  
  46. struct tipc_portid {
  47.     __u32 ref;
  48.     __u32 node;
  49. };
  50.  
  51. struct tipc_name {
  52.     __u32 type;
  53.     __u32 instance;
  54. };
  55.  
  56. struct tipc_name_seq {
  57.     __u32 type;
  58.     __u32 lower;
  59.     __u32 upper;
  60. };
  61.  
  62. static inline __u32 tipc_addr(unsigned int zone,
  63.                   unsigned int cluster,
  64.                   unsigned int node)
  65. {
  66.     return (zone << 24) | (cluster << 12) | node;
  67. }
  68.  
  69. static inline unsigned int tipc_zone(__u32 addr)
  70. {
  71.     return addr >> 24;
  72. }
  73.  
  74. static inline unsigned int tipc_cluster(__u32 addr)
  75. {
  76.     return (addr >> 12) & 0xfff;
  77. }
  78.  
  79. static inline unsigned int tipc_node(__u32 addr)
  80. {
  81.     return addr & 0xfff;
  82. }
  83.  
  84. /*
  85.  * Application-accessible port name types
  86.  */
  87.  
  88. #define TIPC_CFG_SRV        0    /* configuration service name type */
  89. #define TIPC_TOP_SRV        1    /* topology service name type */
  90. #define TIPC_RESERVED_TYPES    64    /* lowest user-publishable name type */
  91.  
  92. /* 
  93.  * Publication scopes when binding port names and port name sequences
  94.  */
  95.  
  96. #define TIPC_ZONE_SCOPE        1
  97. #define TIPC_CLUSTER_SCOPE    2
  98. #define TIPC_NODE_SCOPE        3
  99.  
  100. /*
  101.  * Limiting values for messages
  102.  */
  103.  
  104. #define TIPC_MAX_USER_MSG_SIZE    66000
  105.  
  106. /*
  107.  * Message importance levels
  108.  */
  109.  
  110. #define TIPC_LOW_IMPORTANCE        0  /* default */
  111. #define TIPC_MEDIUM_IMPORTANCE        1
  112. #define TIPC_HIGH_IMPORTANCE        2
  113. #define TIPC_CRITICAL_IMPORTANCE    3
  114.  
  115. /* 
  116.  * Msg rejection/connection shutdown reasons
  117.  */
  118.  
  119. #define TIPC_OK            0
  120. #define TIPC_ERR_NO_NAME    1
  121. #define TIPC_ERR_NO_PORT    2
  122. #define TIPC_ERR_NO_NODE    3
  123. #define TIPC_ERR_OVERLOAD    4
  124. #define TIPC_CONN_SHUTDOWN    5
  125.  
  126. /*
  127.  * TIPC topology subscription service definitions
  128.  */
  129.  
  130. #define TIPC_SUB_PORTS         0x01      /* filter for port availability */
  131. #define TIPC_SUB_SERVICE         0x02      /* filter for service availability */
  132. #define TIPC_SUB_CANCEL         0x04    /* cancel a subscription */
  133. #if 0
  134. /* The following filter options are not currently implemented */
  135. #define TIPC_SUB_NO_BIND_EVTS    0x04    /* filter out "publish" events */
  136. #define TIPC_SUB_NO_UNBIND_EVTS    0x08    /* filter out "withdraw" events */
  137. #define TIPC_SUB_SINGLE_EVT    0x10    /* expire after first event */
  138. #endif
  139.  
  140. #define TIPC_WAIT_FOREVER    ~0    /* timeout for permanent subscription */
  141.  
  142. struct tipc_subscr {
  143.     struct tipc_name_seq seq;    /* name sequence of interest */
  144.     __u32 timeout;            /* subscription duration (in ms) */
  145.         __u32 filter;           /* bitmask of filter options */
  146.     char usr_handle[8];        /* available for subscriber use */
  147. };
  148.  
  149. #define TIPC_PUBLISHED        1    /* publication event */
  150. #define TIPC_WITHDRAWN        2    /* withdraw event */
  151. #define TIPC_SUBSCR_TIMEOUT    3    /* subscription timeout event */
  152.  
  153. struct tipc_event {
  154.     __u32 event;            /* event type */
  155.     __u32 found_lower;        /* matching name seq instances */
  156.     __u32 found_upper;        /*    "      "    "     "      */
  157.     struct tipc_portid port;    /* associated port */
  158.     struct tipc_subscr s;        /* associated subscription */
  159. };
  160.  
  161. /*
  162.  * Socket API
  163.  */
  164.  
  165. #ifndef AF_TIPC
  166. #define AF_TIPC        30
  167. #endif
  168.  
  169. #ifndef PF_TIPC
  170. #define PF_TIPC        AF_TIPC
  171. #endif
  172.  
  173. #ifndef SOL_TIPC
  174. #define SOL_TIPC    271
  175. #endif
  176.  
  177. #define TIPC_ADDR_NAMESEQ    1
  178. #define TIPC_ADDR_MCAST        1
  179. #define TIPC_ADDR_NAME        2
  180. #define TIPC_ADDR_ID        3
  181.  
  182. struct sockaddr_tipc {
  183.     unsigned short family;
  184.     unsigned char  addrtype;
  185.     signed   char  scope;
  186.     union {
  187.         struct tipc_portid id;
  188.         struct tipc_name_seq nameseq;
  189.         struct {
  190.             struct tipc_name name;
  191.             __u32 domain; /* 0: own zone */
  192.         } name;
  193.     } addr;
  194. };
  195.  
  196. /*
  197.  * Ancillary data objects supported by recvmsg()
  198.  */
  199.  
  200. #define TIPC_ERRINFO    1    /* error info */
  201. #define TIPC_RETDATA    2    /* returned data */
  202. #define TIPC_DESTNAME    3    /* destination name */
  203.  
  204. /*
  205.  * TIPC-specific socket option values
  206.  */
  207.  
  208. #define TIPC_IMPORTANCE        127    /* Default: TIPC_LOW_IMPORTANCE */
  209. #define TIPC_SRC_DROPPABLE    128    /* Default: 0 (resend congested msg) */
  210. #define TIPC_DEST_DROPPABLE    129    /* Default: based on socket type */
  211. #define TIPC_CONN_TIMEOUT    130    /* Default: 8000 (ms)  */
  212.  
  213. #endif
  214.